/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ihmprojet.core.historique;

import ihmprojet.core.model.Arrete;
import ihmprojet.core.model.ArreteOperateur;
import ihmprojet.core.model.DelegateTreeOperators;
import ihmprojet.core.model.Sommet;
import ihmprojet.core.model.operateur.OperateurBinaire;

/**
 * @ todo Xu, c'est pour toi!
 * @author Rémi PIOTAIX <remi.piotaix@gmail.com>
 */
public class AjouterOperateurBinaireAction extends AbstractAction {

    private Sommet source;
    private Sommet cible;
    private DelegateTreeOperators<Sommet, Arrete> tree;
    private OperateurBinaire opB;

    public AjouterOperateurBinaireAction(DelegateTreeOperators tree, Sommet source, Sommet cible, OperateurBinaire opB) {
        this.source = source;
        this.cible = cible;
        this.opB = opB;
        this.tree = tree;
    }

    @Override
    protected void doInitialize() {
    }

    @Override
    public void doExecute() {
        tree.addOperateur(source, cible, opB);
        System.out.println(opB.toString());
    }

    @Override
    public void doReverse() {
        tree.removeOperateurBySource(source);
    }

    @Override
    public boolean canReverse() {
        return true;
    }

    @Override
    public boolean canExecute() {
        return tree.getParent(source) == tree.getParent(cible) && tree.getOperateurBySource(source) == null;
    }

    @Override
    public String getNom() {
        return "Ajout operateur binaire";
    }
}
